﻿#pragma once

#include <cstdio>
#include <Sparse>
#include <Eigenvalues>
#include <Dense>
#include <OpenMesh/Core/IO/MeshIO.hh>
#include <OpenMesh/Core/Mesh/TriMesh_ArrayKernelT.hh>

// 稀疏矩阵数据结构
typedef Eigen::Triplet<double> Triplet;
typedef std::vector<Triplet> TripletList;
typedef Eigen::SparseMatrix<double> SparseMatrix;

// 定义一般矩阵和 1 列矩阵
typedef Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic> MatrixX;
typedef Eigen::Matrix<double, Eigen::Dynamic, 1> MatrixXx1;

// 预定义网格模板
typedef OpenMesh::TriMesh_ArrayKernelT<> Mesh;
typedef std::shared_ptr<Mesh> MeshPtr;

// 预定义容器
typedef std::vector<Mesh::FaceHandle> FaceList;
typedef std::vector<Mesh::VertexHandle> VertexList;
typedef std::vector<Mesh::EdgeHandle> EdgeList; 
typedef std::vector<Mesh::HalfedgeHandle> HalfedgeList;
